<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * --------------------------------------------------------------------------
 * BLOG KATEGORİ MODEL DOSYASI
 * --------------------------------------------------------------------------
 *
 * @author Ali OYGUR <alioygur@gmail.com>
 * */
class Blog_category_model extends MY_Model {

	public function __construct()
	{
        parent::__construct();
    }

	public function add($data = array())
	{
        $this->db->insert('blog_category', $data);
    }

	public function gets($options = array(), $limit = 0, $offset = 0)
	{
		$this->db
			->select("
        	SQL_CALC_FOUND_ROWS 
        	t1.*, 
        	(SELECT COUNT(*) FROM {$this->db->dbprefix('blog_to_category')} WHERE category_id = t1.id) AS numPost
        	", FALSE)
        	->from('blog_category AS t1');

        // WHERE
        // LIMIT
		if ($limit > 0)
		{
            $this->db->limit($limit, $offset);
        }
		
		return parent::my_result();
    }

	public function get($id)
	{
        $q = $this->db->get_where('blog_category', array('id' => $id));

        if (!$q->num_rows())
            return false;

        return $q->row();
    }

	public function edit($data, $id)
	{
        $this->db->update('blog_category', $data, array('id' => $id));
    }

	public function delete($id)
	{
        // blog_to_category tablosundan gönderi kategori ilişkileri siliniyor.
        $q = $this->db
                ->select('id')
                ->from('blog_category')
                ->where('id', $id)
                ->or_where('parent_id', $id)
                ->get();

		if ($q->num_rows() > 0)
		{
			foreach ($q->result() as $row)
			{
                $this->db->delete($this->_table[1], array('category_id' => $id));
            }
        }

        // Kategori ve alt kategorileri siliniyor
        $this->db
                ->where('id', $id)
                ->or_where('parent_id', $id)
                ->delete('blog_category');
    }

    /**
     * ----------------------------------------------------------------------
     * HELPERS
     * ----------------------------------------------------------------------
     */

    /**
     * blog_category tablosundaki en yüksek sıra numarası(order) bulunup 1 ekleniyor.
     * Kullanıldığı yerler: add()
     *
     * @return int
     */
	public function get_order_number()
	{
        return $this->db->select_max('`order`')->get('blog_category')->row()->order + 1;
    }

    /**
     * Tüm kategorileri ağaç menü şeklinde selectbox şeklinde döndürür.
     *
     * @param int ebeveyn ID
     * @param int önek 'in sayısı
     * @param int gelmesini istemediğiniz sayfanın ID si (genelde sayfa düzenlenirken sayfa kendi kendinin üstü olmasın diye kullanılıyor)
     * @return array
     */
	public function tree_selectbox($parent_id = 0, $prefix_num = 0, $except = 0)
	{
        static $result = array();

        $q = $this->db
                ->select("t1.id, t1.title")
                ->from('blog_category' . ' AS t1')
                ->where('parent_id', $parent_id)
                ->where('t1.id <>', $except)
                ->get();

		if ($q->num_rows() > 0)
		{
			foreach ($q->result() as $row)
			{
                $result[$row->id] = str_repeat('-', $prefix_num) . $row->title;

                // callback
                $this->tree_selectbox($row->id, ($prefix_num + 2), $except);
            }
        }

        return $result;
    }

    /**
     * Enalt kategorileri çeker.
     * Genelde içerik eklerkeen lazım oluyor. İçerikler sadece en alt kategorilere 
     * Eklenebildiğinden böyle bir fonksiyon yazıldı.
     * 
     * @param string $parent en üst isim (boş kalsın)
     * @param int $parent_id listelemenin başlayacağı kategori IDsi
     * @return array
     * */
	public function get_path($parent= "", $parent_id = 0)
	{
        static $data = array();

        $q = $this->db->get('blog_category');

		foreach ($q->result() as $row)
		{
			if ($this->_has_children($row->id))
			{
                $this->get_path($parent . "/" . $row->title, $row->id);
			}
			else
			{
                $data[$row->id] = $parent . "/" . $row->title;
            }
        }

        return $data;
    }

	private function _has_children($id)
	{
        return $this->db
                ->where('parent_id', $id)
                ->count_all_results('blog_category');
    }
}

/* End of file Blog_category_model.php */
